package com.eastfair.api;

import com.eastfair.core.base.R;
import com.eastfair.questionnaire.dto.*;
import com.eastfair.questionnaire.vo.*;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;


@FeignClient(value = "questionnaire")
public interface QuestionnaireServiceFeign {
    /**
    *Description 查询项目下所有问卷
    *@Date 15:53 2021/9/7
    *@param
    *@return com.eastfair.core.base.R<java.util.List<com.eastfair.questionnaire.vo.QuestionnaireVO>>
    *@Author yuwx
    **/
    @GetMapping("/questionnaire/listAll")
    R<List<QuestionnaireVO>> listAll();
    /**
    *Description 查询问卷、问题、答案的完整结构，以及对应主体的答案结果  (支持跳题结构)
    *@Date 15:53 2021/9/7
    *@param id 问卷id
    *@param subjectType 主体类型
    *@param subjectId 主体Id
    *@return com.eastfair.core.base.R<com.eastfair.questionnaire.vo.QuestionnaireVO>
    *@Author yuwx
    **/
    @GetMapping("/questionnaire/getCompleteWithAnswerResult")
    R<QuestionnaireVO> getCompleteWithAnswerResult(@RequestBody QuestionnaireQuery questionnaire);
    /**
    *Description 查询问卷、问题、答案的完整结构，以及对应主体的答案结果
    *@Date 16:49 2021/9/7
     *@param id 问卷id
     *@param subjectType 主体类型
     *@param subjectId 主体Id
    *@return com.eastfair.core.base.R<com.eastfair.questionnaire.vo.DynamicQuestionnaireVO>
    *@Author yuwx
    **/
    @GetMapping("/questionnaire/getDynamicWithAnswerResult")
    R<DynamicQuestionnaireVO> getDynamicWithAnswerResult(@RequestBody QuestionnaireQuery questionnaire);
    /**
    *Description 根据问卷Id查询所有问题
    *@Date 15:58 2021/9/7
    *@param questionnaireId 问卷ID
    *@return com.eastfair.core.base.R<java.util.List<com.eastfair.questionnaire.vo.QuestionVO>>
    *@Author yuwx
    **/
    @GetMapping("/question/listByQuestionnaireId")
    R<List<QuestionVO>> listByQuestionnaireId(@RequestBody QuestionDTO question);
    /**
     *Description 根据问卷Id查询所有问题以及选中的答案（只显示末级选中的答案）
     *@Date 15:58 2021/9/7
     *@param projectId 项目ID
     *@param questionnaireId 问卷ID
     *@param subjectType 主体类型
     *@param subjectId 主体Id
     *@return com.eastfair.core.base.R<java.util.List<com.eastfair.questionnaire.vo.QuestionVO>>
     *@Author yuwx
     **/
    @GetMapping("/question/listWithSelectedAnswer")
    R<List<QuestionVO>> listWithSelectedAnswer(@Validated({QuestionQueryDTO.listWithSelectedAnswer.class}) @RequestBody QuestionQueryDTO question);

    /**
    *Description
    *@Date 16:49 保存答案(一次只能保存一个对象的答案结果)
    *@param subjectType 实体类型
    *@param subjectId 实体Id
    *@param sourceSystem 系统类型
    *@param answerResultList 答案（需要questionId,answerId,inputResult）
    *@return com.eastfair.core.base.R<java.util.List<com.eastfair.questionnaire.vo.QuestionVO>>
    *@Author yuwx
    **/
    @GetMapping("/answerResult/save")
    R<Boolean> save (@RequestBody AnswerSubjectResultSaveDTO answerResult);
    /**
    *Description 内部答案转外部答案 返回的key是外部问题id
    *@Date 17:54 2021/9/7
    *@param internalAnswerList 内部答案List
    *@param systemSourceEnum 系统类型
    *@return com.eastfair.core.base.R<java.util.Map<java.lang.String,java.util.List<java.lang.String>>>
    *@Author yuwx
    **/
    @GetMapping("/relationExternalAnswer/convertInternalToExternal")
    R<Map<String, List<ExternalAnswerVO>>> convertInternalToExternal(@RequestBody RelationExternalAnswerDTO relationExternalAnswer);
    /**
    *Description 外部答案转内部答案  返回的key是内部问题id
    *@Date 17:56 2021/9/7
     *@param externalAnswerList 外部部答案List
     *@param systemSourceEnum 系统类型
    *@return com.eastfair.core.base.R<java.util.Map<java.lang.Long,java.util.List<com.eastfair.questionnaire.vo.AnswerVO>>>
    *@Author yuwx
    **/
    @GetMapping("/relationExternalAnswer/convertExternalToInternal")
    R<Map<Long, List<InternalAnswerVO>>> convertExternalToInternal(@RequestBody RelationExternalAnswerDTO relationExternalAnswer);

    /**
    *Description 答案转标签
    *@Date 17:58 2021/9/7
    *@param systemSourceEnum 系统类型
    *@param answerIdList 答案列表
    *@return com.eastfair.core.base.R<java.util.List<java.lang.Long>>
    *@Author yuwx
    **/
    @GetMapping("/relationTag/convertToTag")
    R<List<Long>> convertToTag(@RequestBody RelationTagDTO relationTag);

    /**
    *Description 答案转标签,保持分组结构
    *@Date 18:00 2021/9/7
     *@param systemSourceEnum 系统类型
     *@param answerIdList 答案列表
    *@return com.eastfair.core.base.R<java.util.List<java.util.List<java.lang.Long>>>
    *@Author yuwx
    **/
    @GetMapping("/relationTag/convertToTagGroup")
    R<List<List<Long>>> convertToTagGroup(@RequestBody RelationTagDTO relationTag);

    /**
    *Description 获取位置下问卷(包括答案)
    *@Date 18:08 2021/12/7
    *@param displayLocationQuestionnaireQuery
    *@return com.eastfair.core.base.R<com.eastfair.questionnaire.vo.DynamicQuestionnaireVO>
    *@Author yuwx
    **/
    @PostMapping(value = "/getQuestionnaireByDisplayLocation")
    R<DynamicQuestionnaireVO> getQuestionnaireByDisplayLocation(@RequestBody DisplayLocationQuestionnaireQuery displayLocationQuestionnaireQuery) ;

    @ApiOperation(value = "获取位置下选项", notes = "获取位置下选项")
    /**
    *Description 获取位置下选项
    *@Date 18:09 2021/12/7
    *@param displayLocationQuestionnaireQuery
    *@return com.eastfair.core.base.R<com.eastfair.questionnaire.vo.QuestionnaireVO>
    *@Author yuwx
    **/
    @PostMapping(value = "/getOptionByDisplayLocation")
    R<QuestionnaireVO> getOptionByDisplayLocation(@RequestBody  DisplayLocationQuestionnaireQuery displayLocationQuestionnaireQuery);
    }
